首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >团队Invoke_response被团队拒绝?

团队Invoke_response被团队拒绝?
EN

Stack Overflow用户
提问于 2022-04-27 23:09:37
回答 1查看 84关注 0票数 0

我有一个团队应用程序运行在一个独立的服务器上,并为应用程序上的消息扩展设置了AzureBot。我有一个实现消息处理扩展TeamsActivityHandler的类,这些类似乎都在工作。问题是当我用InvokeResponse来回应的时候。我将其放入具有正确类型的活动中,没有错误,但是团队似乎拒绝了消息,因为它没有为包含响应的POST请求提供ID。在创建这个活动的过程中,有什么是我遗漏的吗?

代码语言:javascript
复制
async def handle(turn_context):

    invoke_response = await message_handler.on_invoke_activity(turn_context)

    # invoke_response is an instance of botbuilder.schema._models_py3.InvokeResponse

    result = await turn_context.send_activity(Activity(type=ActivityTypes.invoke_response, value=invoke_response))

    self.logger.info(result)
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-05-02 18:39:57

我完全不知道消息扩展遵循的是标准请求响应模型,而不是像bot那样的请求请求模型。下面是一个使用烧瓶- ms示例这里的完整示例:

代码语言:javascript
复制
import asyncio
import json

from botbuilder.core.teams import TeamsActivityHandler
from botbuilder.schema import Activity, CardAction, HeroCard

from botbuilder.core import (
    BotFrameworkAdapter,
    BotFrameworkAdapterSettings, TurnContext, CardFactory, MessageFactory,
)

from botbuilder.schema.teams import (
    MessagingExtensionAttachment,
    MessagingExtensionQuery,
    MessagingExtensionResult,
    MessagingExtensionResponse,

)

from flask import request, Response
from flask_restful import Resource


class ActivityHandler(TeamsActivityHandler):

    async def on_teams_messaging_extension_query(self, turn_context: TurnContext, query: MessagingExtensionQuery):
        search_query = str(query.parameters[0].value).strip()
        if search_query == '':
            await turn_context.send_activity(
                MessageFactory.text('You cannot enter a blank string for the search')
            )
            return
       
        # TODO: Implement a search returning objects
        search_results = self._get_search_results(search_query)
   
        attachments = []
        for obj in search_results:
            hero_card = HeroCard(
                title=obj['name'], tap=CardAction(type='invoke', value=obj)
            )
   
            attachment = MessagingExtensionAttachment(
                content_type=CardFactory.content_types.hero_card,
                content=HeroCard(title=obj['name']),
                preview=CardFactory.hero_card(hero_card),
            )
            attachments.append(attachment)
        return MessagingExtensionResponse(
            compose_extension=MessagingExtensionResult(
                type='result', attachment_layout='list', attachments=attachments
            )
        )


class TeamsMessageExtensionsBot(Resource):

    def __init__(self):

        self.event_loop = asyncio.new_event_loop()
        asyncio.set_event_loop(self.event_loop)

        app_config = BotFrameworkAdapterSettings(app_id='YOUR-BOT-ID',
                                                 app_password='YOUR-BOT-PASSWORD')
        self.bot_framework_adaptor = BotFrameworkAdapter(app_config)

    def post(self):

        message_handler = ActivityHandler()

        if 'application/json' in request.headers['Content-Type']:
            body = request.json
        else:
            return Response(status=415)

        activity = Activity().deserialize(body)
        auth_header = (
            request.headers['Authorization'] if 'Authorization' in request.headers else ''
        )

        try:
            task = self.event_loop.create_task(
                self.bot_framework_adaptor.process_activity(activity, auth_header, message_handler.on_turn)
            )

            invoke_response = self.event_loop.run_until_complete(asyncio.gather(task))[0]

            if invoke_response:
                self.logger.info(invoke_response.body)
                return Response(response=json.dumps(invoke_response.body),
                                status=invoke_response.status, mimetype='application/json')

            return Response(status=201)
        except Exception as exception:
            raise exception
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72036223

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档