shellbot icon indicating copy to clipboard operation
shellbot copied to clipboard

Caller number

Open josep112 opened this issue 8 years ago • 6 comments

Qual variável devo usar para conseguir visualizar o numero do celular da pessoa que esta enviando a mensagem?

josep112 avatar May 04 '17 13:05 josep112

O telefone do usuário não é enviado no object user, somente os campos abaixo fazem parte da estrutura do objeto user:

id first_name last_name username

Desculpe a demora, pois as coisas estão corridas.

shellscriptx avatar May 17 '17 19:05 shellscriptx

Olá! Como posso fazer para pegar o valor do botão pressionado? Dede já obg!

ptzumba avatar Sep 22 '17 16:09 ptzumba

O valor da query está contida na variável callback_query_data que é inicializada sempre que um inline_button é pressionado. Para maior esclarecimento, montei o código abaixo que exibe um menu contendo 3 opções que retornam valores distintos (10, 20 e 30) e que está associado ao comando /menu.

# Importando API
source ShellBot.sh

# Token do bot
bot_token='<TOKEN_AQUI>'

# Inicializando o bot
ShellBot.init --token "$bot_token" --monitor --flush
ShellBot.username

# limpa o conteúdo da variável.
botao=''
# Criando 3 botões e definindo seus valores.
ShellBot.InlineKeyboardButton --button 'botao' --line 1 --text 'Opcao 1' --callback_data '10' # valor 10
ShellBot.InlineKeyboardButton --button 'botao' --line 2 --text 'Opcao 2' --callback_data '20' # valor 20
ShellBot.InlineKeyboardButton --button 'botao' --line 3 --text 'Opcao 3' --callback_data '30' # valor 30

# Cria o objeto inline_keyboard contendo os elementos armazenados na variável 'botao'
# É retornada a nova estrutura e armazena em 'keyboard'.
keyboard="$(ShellBot.InlineKeyboardMarkup -b 'botao')"

while :
do
    # Obtem as atualizações
    ShellBot.getUpdates --limit 100 --offset $(ShellBot.OffsetNext) --timeout 30

    # Lista o índice das atualizações
    for id in $(ShellBot.ListUpdates)
    do
    # Inicio thread
    (
        # Verifica se uma query foi instanciada.
        if [[ ${callback_query_chat_instance[$id]} ]]
        then
            # Testa o valor de retorno.
            case ${callback_query_data[$id]} in
                10) btn_nome="Opcao 1";;
                20) btn_nome="Opcao 2";;
                30) btn_nome="Opcao 3";;
            esac

            # Responde a query com um texto personalizado.
            ShellBot.answerCallbackQuery --callback_query_id ${callback_query_id[$id]} --text "'$btn_nome' foi pressionada. Valor: ${callback_query_data[$id]}"
        fi

        # Verifica se o texto enviado é um comando válido.
        # Verifica se a mensagem é do tipo comando.
        if [[ ${message_entities_type[$id]} == bot_command ]]
        then
            case ${message_text[$id]%%@*} in
                "/menu")
                    # Envia mensagem anexando o teclado.
                    ShellBot.sendMessage --chat_id ${message_chat_id[$id]} \
                                         --text "Olá *${message_from_first_name[$id]}*, clique na opção desejada." \
                                         --parse_mode markdown \
                                        --reply_markup "$keyboard"
                ;;
            esac
        fi
    ) & # Utilize a thread se deseja que o bot responda a várias requisições simultâneas.
    done
done
#FIM

Habilite o modo --monitor na chamada do método ShellBot.init para lhe auxiliar no momento de tratar as variáveis. Para mais informações clique aqui.

Espero ter ajudado e qualquer dúvida estou a disposição.

Att. SHAMAN

shellscriptx avatar Sep 22 '17 17:09 shellscriptx

Muito obrigado amigo!

ptzumba avatar Sep 22 '17 17:09 ptzumba

Shaman, qual o comando para enviar a digitação do bot? desde já muito obg!

ptzumba avatar Oct 05 '17 20:10 ptzumba

Utiliza-se o método ShellBot.sendChatAction para enviar uma determinada ação do bot ao usuário. No seu caso em especifico o nome da ação é typing

shellscriptx avatar Oct 05 '17 21:10 shellscriptx