Microsoft Bot Emulator显示“发送失败。重试”。VSCode显示KeyError:“HTTP\U上下文\U类型”

2024-10-02 18:20:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我是微软机器人框架的新手,我正在通过youtube视频https://youtu.be/ynG6Muox81o学习它,并在Ubuntu的python3上制作我的机器人

{a2}表示“发送失败。重试”

Microsoft Bot Emulator

Visual Studio Code显示KeyError:“HTTP_CONTEXT_TYPE”

Visual Studio Code

我做的一切都对,我的机器人连接到http://localhost:3978/,并且bot仿真器已连接到http://localhost:3978/api/messages/. stackoverflow上的许多人都因为windows防火墙而面临同样的问题,但我的是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)

我似乎无法理解这个问题以及如何解决它。如果有人能帮我解决这个问题,那将是非常有帮助的,因为我对构建机器人非常感兴趣

我已将我的Bot项目上传到gitlabhttps://gitlab.com/pdmnbhrawal/myechobot01


Tags: fromimportloopapplocalhostifrequestdef
1条回答
网友
1楼 · 发布于 2024-10-02 18:20:01

这是一个简单的打字错误。你写的是“上下文类型”而不是“内容类型”。你链接到的YouTube教程告诉你这样写:

        if "application/json" in request.headers["content-type"]:

为了避免这种打字错误,您可以下载视频直接链接到的源代码,而不必自己重写

通过在堆栈跟踪中注意到它告诉您哪行代码抛出了错误,您可以自己解决此类错误。当它说KeyError: 'HTTP_CONTEXT_TYPE'时,应该向您表明您输入了错误的密钥,您应该检查是否有输入错误。您还可以尝试使用调试器并单步执行代码

您可能会注意到机器人还有一些其他问题。它不能正确处理会话更新活动,因为它不能解释没有文本的传入活动。它也不会从api/messages端点返回HTTP响应。您可能希望稍后修复这些问题,但您的bot仍将运行

相关问题 更多 >