【问题标题】:I want to make a telegram bot with php keyboards button not work properly我想用 php 键盘按钮制作一个电报机器人无法正常工作
【发布时间】:2017-02-17 12:05:32
【问题描述】:

我想用 php 制作一个电报机器人,逐个询问一些问题(键盘按钮)并将详细信息存储在对象中,最后回答某事是否存在!

我写了这段代码

<?php
    require_once ("iphone_class.php");

    $message = file_get_contents("php://input");
    $result = json_decode($message, true);

    file_put_contents('test.txt', $result);

    $token = "255676049:AAEv9GbV95Xg2UmzZR4D-0kXbIj73NKnl4o";
    $base_url = "https://api.telegram.org/bot{$token}/SendMessage?chat_id=";
    $chat_id = $result['message']['chat']['id'];
    $message_from_user = $result["message"]["text"];

    function AddtoKeyboard($names)
    {
        $ar = array(
            'keyboard' => array(),
        );
        foreach ($names as $name) {
            $ar2 = array($name);
            array_push($ar["keyboard"], $ar2);

        }
        return $ar;
    }

    function get_new_message(){
        $message = file_get_contents("php://input");
        $result = json_decode($message, true);
        $message_from_user = $result["message"]["text"];
        return $message_from_user;
    }

    if ($message_from_user == "موبایل") {

        $m = array("صفحه ی اصلی", "اندرویدی", "اپل");
        $keyb = json_encode(AddtoKeyboard($m));
        $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("لطفا نوع موبایل مورد نظر را انتخاب کنید: ")
            . "&reply_markup=" . $keyb);

        $message_from_user = get_new_message();
        file_get_contents($base_url . $chat_id . "&text=" . urlencode($message_from_user));

        if ($message_from_user == "اپل") {

            $iphone = new Iphone();

            $m = array("صفحه ی اصلی", "5", "5c", "5s", "se", "6", "6 plus", "6s", "6s plus");
            $keyb = json_encode(AddtoKeyboard($m));
            $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("لطفا مدل موبایل مورد نظر را انتخاب کنید: ")
                . "&reply_markup=" . $keyb);
            $message_from_user = get_new_message();
            $iphone->setModel($message_from_user);

            $m = array("صفحه ی اصلی", "16", "64", "128", "256");
            $keyb = json_encode(AddtoKeyboard($m));
            $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("لطفا ظرفیت موبایل مورد نظر را انتخاب کنید: ")
                . "&reply_markup=" . $keyb);
            $message_from_user = get_new_message();
            $iphone->setCapacity($message_from_user);

            $m = array("صفحه ی اصلی", "silver", "gray", "gold", "roseGold");
            $keyb = json_encode(AddtoKeyboard($m));
            $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("لطفا رنگ موبایل مورد نظر را انتخاب کنید: ")
                . "&reply_markup=" . $keyb);
            $message_from_user = get_new_message();
            $iphone->setColor($message_from_user);

            //TODO check ba database va message dadan quanity

        }else if ($message_from_user == "اندروید"){

        }


    } else if ($message_from_user == "لپ تاپ") {


    } else if ($message_from_user == "تبلت") {

        $text = "ipad";

    } else if ($message_from_user == "صفحه ی اصلی") {

        $m = array("موبایل", "تبلت", "لپ تاپ");
        $keyb = json_encode(AddtoKeyboard($m));
        $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("صفحه ی اصلی") . "&reply_markup=" . $keyb);

    } else {

        $text = "hichkodoom";
        file_get_contents($base_url . $chat_id . "&text=" . urlencode($text));

    }

    ?>

但是在

之后
if ($message_from_user == "موبایل") {

        $m = array("صفحه ی اصلی", "اندرویدی", "اپل");
        $keyb = json_encode(AddtoKeyboard($m));
        $rep = file_get_contents($base_url . $chat_id . "&text=" . urlencode("لطفا نوع موبایل مورد نظر را انتخاب کنید: ")
            . "&reply_markup=" . $keyb);

        $message_from_user = get_new_message();

消息不会更新到最后一个答案,我的 php 文件从头开始运行,我丢失了我的对象 iphone!

【问题讨论】:

  • 错误报告中的任何内容? php.net/manual/en/function.error-reporting.php 或者您是否正忙着从下面的答案中观看该视频? lol 我可能会添加,不会存活很长时间。
  • 我没有任何错误,我的问题是 get_new_message 方法无法正常工作,或者我的解决方案不正确
  • 请查看您问题的标题:1) 我不知道keyboards buttonkeyboard buttons 与这篇文章有何关系 2) 更传统的形式可能是telegram bot does not work properly - 在问题列表中,标签(包括本文第一版中的 php)显眼地显示。 (你(希望)没有失去你的 iPhone,你甚至得到了一个 Iphone 的新实例。)

标签: php bots webhooks telegram


【解决方案1】:

您无法收到这样的新消息。

if ($message_from_user == "موبایل") {
        ...

        $message_from_user = get_new_message();

对于每条消息,再次调用 php 回调(因为您还观察到 php 代码从一开始就为新消息运行的行为)。 如果您想存储来自用户的消息并与他们进行交互,您应该将消息存储在数据库中(或存储在会话中),然后当您收到消息时,检查聊天 id 以查看您是否与该用户(例如过去 10 分钟内的任何交互)或想要从头开始。

【讨论】:

    【解决方案2】:

    使用这样的 switch case 来区分消息:

    switch($message_from_user)
    {
       case "موبایل":
       //do something
       break;
       case "اندروید":
       //do something
       break;
       case "اپل":
       //do something
       break;
    
    }
    

    【讨论】:

    • 下次请格式化您的帖子。这次是我为你做的。
    猜你喜欢
    • 1970-01-01
    • 2017-08-01
    • 1970-01-01
    • 2018-03-23
    • 2022-10-05
    • 1970-01-01
    • 1970-01-01
    • 2016-03-22
    • 1970-01-01
    相关资源
    最近更新 更多