【问题标题】:Telegram (simplest) inline bot send photo 2 times on iOSTelegram(最简单)内联机器人在 iOS 上发送照片 2 次
【发布时间】:2018-08-29 21:35:35
【问题描述】:

我有一个类似于@pic 的内联机器人,它工作正常,当我输入查询词时,我可以看到图片出现,所以我可以选择一个并发送到聊天室。问题是当我这样做时 - 发送了 2 个相同结果的副本。这只发生在 iOS 客户端上。在 Android、PC 和其他平台上,只发送一张图片。我检查了所有日志(机器人在 Node.js 中完成)并且对于每个请求我都有一个响应。尽管@pic bot 工作正常,但这似乎是一个 iOS 客户端错误。有人遇到过这个错误或知道是什么原因造成的吗?

answerInlineQuery 响应对象示例

{
"inline_query_id": "817150058382989968",
"results": [
    {
        "type": "photo",
        "id": "se090",
        "photo_url": "http://www.shadowera.com/secardbot361/se090.jpg",
        "thumb_url": "http://www.shadowera.com/secardbot361/se090.jpg",
        "photo_width": 344,
        "photo_height": 480,
        "title": "Tracking Gear",
        "description": "You can view the hands of opposing players.",
        "caption": "king"
    },
    {...

更新: 因此,我在 node.js @iosinlinebot 中创建了一个最简单的内联机器人(您可以尝试一下),并且您具有相同的行为:仅在 iOS 设备上,一旦点击结果,您将向聊天发送 2 张图像。 代码如下:

exports.handler = function(event, context) {
        console.log(event);
        const https = require("https");
        let answer = {
            inline_query_id: event.inline_query.id,
            results: [{
                    type: "photo",
                    id: "abcd",
                    photo_url: "https://lh3.googleusercontent.com/jVXglyWWL5J2y1vRN-7Jy3_ozvvZc4w5486IAkbAIrWcNN_vn7YuIvhc1JDtGq43BqGl=s180",
                    thumb_url: "https://lh3.googleusercontent.com/jVXglyWWL5J2y1vRN-7Jy3_ozvvZc4w5486IAkbAIrWcNN_vn7YuIvhc1JDtGq43BqGl=s180",
                    photo_width: 180,
                    photo_height: 180,
                    title: "title",
                    description: "description",
                    caption: "test"
                }],
            cache_time:1 
        };
        let postBody = JSON.stringify(answer);
        let options = {
            hostname: "api.telegram.org",
            port: 443,
            path: "/bot" + process.env.TOKEN + "/answerInlineQuery",
            method: "POST",
            headers: {
                'Content-Type': 'application/json',
                'Content-Length': postBody.length
            }
        };

        let postreq = https.request(options, (res) => {
            res.setEncoding('utf8');
            const body = [];
            res.on('data', (chunk) => body.push(chunk));

            res.on('end', () => {
                let j = body.join('');
                console.log(j);
                //context.done(JSON.parse(j));
            });
        });
        postreq.write(postBody);
        postreq.end();
};

这是一个事件对象(来自电报):

{
  "update_id": 12345678,
  "inline_query": {
    "id": "123456789123456789",
    "from": {
      "id": 123456789,
      "is_bot": false,
      "first_name": "Firstname",
      "username": "username",
      "language_code": "it-IT"
    },
    "query": "test",
    "offset": ""
  }
}

更新: 感谢 Sedric Heidarizarei,我们能够找到问题所在。这是一个电报 iOS 客户端错误。如果InlineQueryResultPhoto 对象包含 caption 字段,您的用户将在聊天中发布 2 张图片。

【问题讨论】:

    标签: ios client inline telegram telegram-bot


    【解决方案1】:

    使用^$ 关闭正则表达式的开头和结尾非常重要。
    例如,具有此正则表达式 /^[/]start/ 的用户可以使用 startstart astart b 作为 Bot 命令,并允许他们接收您的照片,但使用 /^[/]start$/,用户必须输入准确的 /start 命令.

    1:使用此模块:node-telegram-bot-api
    2:并发送您的照片:

    bot.onText(/^[/]start$/, (msg) => {
      const opts = {
        parse_mode: 'Markdown',
        reply_markup: {
            inline_keyboard: [[{
                    text: '?',
                    callback_data: 'back'
                    }]]
            }
      };
      bot.sendPhoto(msg.chat.id, 'AgADBAADn64xBoABCx8L8trMV9eMqgDAAEC', opts); // Your Photo id
    }); 
    

    注意:
    打开一个空项目,然后使用并检查您的InlineQueryResultPhoto

    更新:
    这是一个 Telegram 错误,供临时使用,请从您的 let answer ={} 中删除 caption

    【讨论】:

    • 感谢您的回复,但我的问题与机器人命令无关。我的机器人在内联模式下工作。它向电报发送所有常规 answerInlineQuery 对象(我会将其添加到我的问题中)。问题是当用户在客户端选择一张照片结果在聊天中发布时,会发布 2 张图片(仅在 iOS 上)。
    • 您使用的是哪个库?你能分享你的代码的一部分吗?我可以在 1 天后检查,因为我正在度假。打开一个空项目,然后使用并检查您的InlineQueryResultPhoto
    • 我不使用任何库(甚至不用于 http),我的代码非常纤薄,是用 vanilla node.js 编写的。它通过 https 将带有“InlineQueryResultPhoto”结果数组的正确“answerInlineQuery”发送到 TG API,并从 TG 接收“ok”。我可能会创建另一个基本的内联机器人,只是为了测试是否仅针对 iOS 客户端再次出现相同的错误......会让你知道......顺便说一句,你可以试试我的机器人 @secardbot,使用一些关键字,如“fore”、“hero” , “物品”。请注意它是如何在 iOS 设备上的聊天中发送 2 张照片的。
    • 在 iPhone 5S 中,我有 2 条消息,1 条(照片+标题)和 2 条(只有标题),我在等你。
    • 我创建了新的机器人只是为了测试这个东西,你可以看到我的问题更新了。如您所见,它是最简单的内联机器人,但在 iOS 上仍然存在相同的错误。
    猜你喜欢
    • 2020-07-09
    • 2016-08-15
    • 2016-10-17
    • 2015-09-14
    • 2017-12-05
    • 1970-01-01
    • 2019-05-14
    • 1970-01-01
    • 2017-06-06
    相关资源
    最近更新 更多