前一天我们讲到综合版可以接收所有种类的讯息。
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
print("event", event.message.id)
# print("event", type(event))
if isinstance(event, MessageEvent): # 如果有讯息事件
print("message", event.message)
message = []
if event.message.type == 'text':
text_ = event.message.text
message.append(TextSendMessage(text=text_))
elif event.message.type == 'sticker':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'image':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'video':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'audio':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
elif event.message.type == 'location':
text_ = event.message.id
message.append(TextSendMessage(text=text_))
# 回复传入的讯息文字
line_bot_api.reply_message( event.reply_token, message )
return HttpResponse()
else:
return HttpResponseBadRequest()
那我们先专心讲解关於 type()
为 text
的讯息
tyep == text
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
print("event", event.message.id)
# print("event", type(event))
if isinstance(event, MessageEvent): # 如果有讯息事件
print("message", event.message)
message = []
if event.message.type == 'text':
text_ = event.message.text
message.append(TextSendMessage(text=text_))
line_bot_api.reply_message( event.reply_token, message )
return HttpResponse()
else:
return HttpResponseBadRequest()
我们在 line 19
宣告了一个 list,message
好让我们之後 line_bot_api.reply_message()
推送讯息比较方便。
这边跟之前一样都没有改过,就是回推送传过的讯息。
那我们改成如果遇到关键字就传送某些讯息的话...
from django.shortcuts import render
# Create your views here.
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseBadRequest, HttpResponseForbidden
from django.views.decorators.csrf import csrf_exempt
from django.conf import settings
from linebot import LineBotApi, WebhookParser
from linebot.exceptions import InvalidSignatureError, LineBotApiError
from linebot.models import MessageEvent, TextSendMessage
import os
line_bot_api = LineBotApi(settings.LINE_CHANNEL_ACCESS_TOKEN)
parser = WebhookParser(settings.LINE_CHANNEL_SECRET)
@csrf_exempt
def callback(request):
if request.method == 'POST':
signature = request.META['HTTP_X_LINE_SIGNATURE']
body = request.body.decode('utf-8')
try:
events = parser.parse(body, signature) # 传入的事件
except InvalidSignatureError:
return HttpResponseForbidden()
except LineBotApiError:
return HttpResponseBadRequest()
for event in events:
print("event", event.message.id)
# print("event", type(event))
if isinstance(event, MessageEvent): # 如果有讯息事件
print("message", event.message)
message = []
if event.message.type == 'text':
mtext = event.message.text
if "嗨" in mtext:
text_ = "哈罗你好"
else:
text_ = 'What?'
message.append(TextSendMessage(text=text_))
# 回复传入的讯息文字
line_bot_api.reply_message( event.reply_token, message )
return HttpResponse()
else:
return HttpResponseBadRequest()
if event.message.type == 'text':
mtext = event.message.text
if "嗨" in mtext:
text_ = "哈罗你好"
else:
text_ = 'What?'
我们看一下 mtext 里面有甚麽:
mtext: 嗨
mtext: 呜呜呜
type of mtext: <class 'str'>
这里我们可以看到 mtext
是 str
型态
所以这里就可以透过逻辑运算来处理文字讯息。
当然,这里其实都算是透过官版就可以处理的问题,我们明天就来看看基本的按钮选项(Button Template)
补充一个在 ngrok 连线时有可能发生的问题:
启动 ngrok 连线却出现以下错误:
Your account '' is limited to 1 similtaneous ngrok client session.
Active ngrok client sessions in region 'us':
......
ERR_NGROK_108
这段错误基本上是在说,帐户只允许一个 client session。
附上官网传送门
这边自己的解决方式就只是换区而以:
ngrok http -region ap 8000
供大家参考参考
前篇回顾 sed - 简介 读取编辑文字档的好工具 sed - 2 Pattern 今天来聊一下se...
大家梦想中的职涯都是逐步而稳定的进阶, 最後抵达成功的殿堂. 然而成功的职涯更像是攀岩, 一不小心...
连续 30 天不中断每天上传一支教学影片,教你如何用 React 加上 Firebase 打造社群...
目的 1.降低资料重复性(Data Redundancy) 2.避免资料更新异常(Anomalies...
前言 昨天的文章讲完 Deployment 以及 ReplicaSet 後相信大家应该对於如何产生更...