Microsoft Bot Emulator showing "sending failed. Retry". VSCode shows KeyError: 'HTTP_CONTEXT_TYPE'
Microsoft Bot Emulator showing "sending failed. Retry". VSCode shows KeyError: 'HTTP_CONTEXT_TYPE'
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频学习它 https://youtu.be/ynG6Muox81o 并在 python3 和 Ubuntu 上制作我的机器人。
Microsoft Bot Emulator 显示“发送失败。重试”。
Visual Studio Code 显示 KeyError: 'HTTP_CONTEXT_TYPE'.
我做的一切都正确,我的 bot 连接到 http://localhost:3978/,bot 模拟器连接到 http://localhost:3978/api/messages/。
由于 windows 防火墙,Whosebug 上的许多人遇到了同样的问题,但我的是 ubuntu 我确实检查了它是否已启用但没有。
app.py
from flask import Flask, request, Response
from botbuilder.schema import Activity
from botbuilder.core import BotFrameworkAdapter,BotFrameworkAdapterSettings
import asyncio
from echobot import EchoBot
app = Flask(__name__)
loop = asyncio.get_event_loop()
botadaptersettings=BotFrameworkAdapterSettings("","")
botadapter = BotFrameworkAdapter(botadaptersettings)
ebot = EchoBot()
#POST is the message
@app.route("/api/messages",methods=["POST"])
def messages():
#checking if HTTP file format is JSON or not
if "application/json" in request.headers["context-type"]:
#reading the JSON message
jsonmessage = request.json
else:
#unsupported media type 415
return Response(status=415)
activity = Activity().deserialize(jsonmessage)
async def turn_call(turn_context):
await ebot.on_turn(turn_context)
task = loop.create_task(botadapter.process_activity(activity,"",turn_call))
loop.run_until_complete(task)
if __name__ == '__main__':
app.run('localhost',3978)
echobot.py
from botbuilder.core import TurnContext
class EchoBot:
async def on_turn(self,turn_context:TurnContext):
await turn_context.send_activity(turn_context.activity.text)
</pre>
我似乎无法理解这个问题以及如何解决它。如果有人可以帮助我解决这个问题,那将非常有帮助,因为我对构建机器人非常感兴趣。
我已经将我的 Bot 项目上传到 gitlab https://gitlab.com/pdmnbhrawal/myechobot01。
这是一个简单的错字。您写的是“上下文类型”而不是“内容类型”。您链接到的 YouTube 教程告诉您这样写一行:
if "application/json" in request.headers["content-type"]:
为了避免这种错别字,您可以直接下载视频链接的源代码,而不是尝试自己重写。
您可以自己解决此类错误,方法是在堆栈跟踪中注意它会告诉您是哪行代码引发了错误。当它显示 KeyError: 'HTTP_CONTEXT_TYPE'
时,应该向您表明您输入了错误的密钥,您应该检查输入错误。您也可以尝试使用调试器并单步执行代码。
您可能会注意到该机器人还有一些其他问题。它没有正确处理对话更新活动,因为它没有考虑没有文本的传入 activity。它也不会 return 来自 api/messages 端点的 HTTP 响应。您可能想稍后解决这些问题,但您的机器人会 运行 尽管有这些问题。
我是 Microsoft Bot Framework 的新手,我正在通过 youtube 视频学习它 https://youtu.be/ynG6Muox81o 并在 python3 和 Ubuntu 上制作我的机器人。
Microsoft Bot Emulator 显示“发送失败。重试”。
Visual Studio Code 显示 KeyError: 'HTTP_CONTEXT_TYPE'.
我做的一切都正确,我的 bot 连接到 http://localhost:3978/,bot 模拟器连接到 http://localhost:3978/api/messages/。 由于 windows 防火墙,Whosebug 上的许多人遇到了同样的问题,但我的是 ubuntu 我确实检查了它是否已启用但没有。
app.py
from flask import Flask, request, Response
from botbuilder.schema import Activity
from botbuilder.core import BotFrameworkAdapter,BotFrameworkAdapterSettings
import asyncio
from echobot import EchoBot
app = Flask(__name__)
loop = asyncio.get_event_loop()
botadaptersettings=BotFrameworkAdapterSettings("","")
botadapter = BotFrameworkAdapter(botadaptersettings)
ebot = EchoBot()
#POST is the message
@app.route("/api/messages",methods=["POST"])
def messages():
#checking if HTTP file format is JSON or not
if "application/json" in request.headers["context-type"]:
#reading the JSON message
jsonmessage = request.json
else:
#unsupported media type 415
return Response(status=415)
activity = Activity().deserialize(jsonmessage)
async def turn_call(turn_context):
await ebot.on_turn(turn_context)
task = loop.create_task(botadapter.process_activity(activity,"",turn_call))
loop.run_until_complete(task)
if __name__ == '__main__':
app.run('localhost',3978)
echobot.py
from botbuilder.core import TurnContext class EchoBot: async def on_turn(self,turn_context:TurnContext): await turn_context.send_activity(turn_context.activity.text) </pre>
我似乎无法理解这个问题以及如何解决它。如果有人可以帮助我解决这个问题,那将非常有帮助,因为我对构建机器人非常感兴趣。
我已经将我的 Bot 项目上传到 gitlab https://gitlab.com/pdmnbhrawal/myechobot01。
这是一个简单的错字。您写的是“上下文类型”而不是“内容类型”。您链接到的 YouTube 教程告诉您这样写一行:
if "application/json" in request.headers["content-type"]:
为了避免这种错别字,您可以直接下载视频链接的源代码,而不是尝试自己重写。
您可以自己解决此类错误,方法是在堆栈跟踪中注意它会告诉您是哪行代码引发了错误。当它显示 KeyError: 'HTTP_CONTEXT_TYPE'
时,应该向您表明您输入了错误的密钥,您应该检查输入错误。您也可以尝试使用调试器并单步执行代码。
您可能会注意到该机器人还有一些其他问题。它没有正确处理对话更新活动,因为它没有考虑没有文本的传入 activity。它也不会 return 来自 api/messages 端点的 HTTP 响应。您可能想稍后解决这些问题,但您的机器人会 运行 尽管有这些问题。