簡體   English   中英

我收到此錯誤“TypeError: can only concatenate str (not "NoneType") to str”

[英]I got this error 'TypeError: can only concatenate str (not "NoneType") to str'

我想要實現的是,用戶將首先向機器人提問。 假設用戶想要找到最近的貨幣兌換商,他/她將輸入“我需要找到貨幣兌換商。然后機器人將回復‘請提供位置”。 一旦用戶提供坐標,機器人就會回復附近所有位置的貨幣兌換商。

from flask import Flask, request
import requests
from twilio.twiml.messaging_response import MessagingResponse


app = Flask(__name__)


@app.route('/sms', methods=['POST'])
def bot():

    incoming_msg = request.values.get('Body', '').lower()
    resp = MessagingResponse()
    msg = resp.message()

    if 'moneychanger' in incoming_msg:
        search1 = 'Please provide the location please'
        msg.body(search1)

        message_latitude = request.values.get('Latitude', None)
        message_longitude = request.values.get('Longitude', None)

        responded = True

        if message_latitude == None:
            location = '%20' + message_latitude + '%2C' + message_longitude 
            responded = False


            url = f'https://tih-api.stb.gov.sg/money-changer/v1?location={location}&radius=2000'

            r = requests.get(url)
            if r.status_code == 200:
                data = r.json()
                search = data['data'][0]['name']
            else:
                search = 'I could not retrieve a quote at this time, sorry.'
            msg.body(search)
            responded = True

    return str(resp)

if __name__ == "__main__":
    app.run(debug=True)

Twilio 開發人員布道者在這里。

我相信您正在使用Twilio API for WhatsApp ,基於您使用的位置參數。

這里的問題是您試圖在同一個 webhook 請求中回復和接收更多信息。 但是,文本消息(其中包含“moneychanger”)將與帶有位置消息的請求不同。 因此,您需要在應用程序中存儲一些狀態,表明您的用戶當前正在尋找貨幣兌換商。

這是一個使用Flask Sessions存儲傳入消息然后詢問位置的示例,如果有消息將其與消息放在一起並響應:

from flask import Flask, request, session
import requests
from twilio.twiml.messaging_response import MessagingResponse


app = Flask(__name__)

# Set the secret key to some random bytes. Keep this really secret! 
# Don't use these bytes because they are in the documentation.
app.secret_key = b'_5#y2L"F4Q8z\n\xec]/'

@app.route('/sms', methods=['POST'])
def bot():
    incoming_msg = request.values.get('Body', '').lower()
    resp = MessagingResponse()
    msg = resp.message()

    message_latitude = request.values.get('Latitude', None)
    message_longitude = request.values.get('Longitude', None)

    if 'moneychanger' in incoming_msg:
        # We're looking for a moneychanger, ask for the location
        response = 'Please provide the location please'
        session['message'] = incoming_msg
    elif message_latitude && message_longitude && 'message' in session && 'moneychanger' in session['message']
        # We have the location and the previous message was asking for a
        # moneychanger.
        location = '%20' + message_latitude + '%2C' + message_longitude 
        url = f'https://tih-api.stb.gov.sg/money-changer/v1?location={location}&radius=2000'

        r = requests.get(url)
        if r.status_code == 200:
            data = r.json()
            response = data['data'][0]['name']
        else:
            response = 'I could not retrieve a quote at this time, sorry.'
        # we're done with the original message so we can unset it now.
        session['message'] = None
    else:
      # In this case, either you have a message that doesn't include 
      # 'moneychanger' or you have latitude and longitude in the request but 
      # no session['message']. You probably want to do something else here, but
      # I don't know what yet.
      response = 'I\'m not sure what you\'re looking for.'

    msg.body(response)
    return str(resp)

if __name__ == "__main__":
    app.run(debug=True)

您可能還想擴展它,以便如果您在收到請求('moneychanger')之前收到一條帶有位置的消息,那么您可以將位置存儲在會話中,然后詢問用戶正在尋找什么。

讓我知道這是否有幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM