Certamente, cada um de nós ama presentes, mas acima de tudo, amamos os desejos que os acompanham. E, até recentemente, não tínhamos a oportunidade de surpreender agradavelmente uma pessoa com palavras calorosas até que a idéia veio à mente: e se dermos às pessoas a oportunidade de trocar namorados (no nariz, 14 de fevereiro, da mesma forma) sem sair da estrutura da maneira usual comunicação - sala de bate-papo nas redes sociais?
Palavra por palavra, e aqui está - um plano de negócios pronto para criar a atmosfera do feriado do Dia dos Namorados! Vamos fazer as pessoas felizes?
Para a idéia da lua!
Obviamente, em primeiro lugar, foi necessário elaborar um plano de ação e descrever a ideia. Devido ao fato de as pessoas terem se tornado mais tímidas e nem sempre prontas para confiar em alguém, a escolha recai sobre a criação de um bot elegante e conveniente para o VK, que tem uma interface familiar, sempre estará à mão e o anonimato das mensagens será codificado no código do programa.
Infelizmente, além de todas as vantagens acima, as comunidades têm duas desvantagens: baixa largura de banda (número de mensagens por segundo) e a proibição de iniciar um diálogo com um usuário aleatório (o usuário deve
primeiro e
explicitamente concordar em receber mensagens em nome da comunidade).
Portanto, temos um usuário que está pronto para enviar um cartão de dia dos namorados para sua alma gêmea, um destinatário e um intermediário na forma de um bot de bate-papo. O esquema de interação é simples, o bot deve: oferecer envio → reconhecer o destinatário → salvar até 14 de fevereiro → entregar → repetir.
Mas isso, é claro, não foi suficiente para a imaginação voraz da mente e, para aumentar a atividade e o envolvimento do público, foi pensado um esquema de outra interação, permitindo que as pessoas se familiarizassem com o sistema, enviando mensagens para pessoas aleatórias. Esses "namorados aleatórios" podem ser apreciados e, se os namorados de duas pessoas se gostarem, damos a eles a oportunidade de conversar.
Isenção de responsabilidade
Este projeto foi criado puramente pelo entusiasmo de duas pessoas, um programador semi-educado (eu) e um inspirador ideológico (Stepan sadfun Popov), não tem o objetivo de lhe ensinar algo (embora possa ajudá-lo a entender a essência do universo), apenas conte uma história interessante da criação e siga o caminho de uma idéia para uma implementação ingênua.
Aprendendo a falar com VK
Depois de
passar por 3-4 bibliotecas diferentes, a pedido da
"API NodeJS VK" , percebi que não existem bibliotecas simples e funcionais que nos permitam usar promessas e trabalhar com a execução. Lembra de um dos problemas descritos acima? Sim, a execução de solicitações ao VKontakte não é direta, mas em lotes de 25 permite aumentar
significativamente a taxa de transferência.
Capacidade comparativa de vários métodos de solicitações ao VKontaktePortanto, decidiu-se escrever algo próprio, uma solução confiável e não muito muleta, com base na biblioteca de
busca de nós .
Para não fornecer todo o código aqui, descreverei simplesmente a lógica do trabalho.
Como as solicitações do programa devem ser empacotadas em uma execução, elas são coletadas na fila LIFO e enviadas se:
- Chamadas 25 ou mais (execução máxima)
- Tempo suficiente se passou desde o último envio, não menos que 50 milissegundos, mas não mais que 150 (para que a fila se mova, apesar do tamanho pequeno)
As solicitações da fila são compiladas no código VK Script, que (nesta implementação) se parece com o seguinte:
var returnables = []; returnables[0] = API.messages.send({"message": ", !", "peer_id": 1, "random_id": 561427}); returnables[1] = API.users.get({"user_ids": 1, "fields": "sex"}); return returnables;
Depois que o código é executado por uma solicitação à VK, o resultado de cada solicitação (pelos
retornáveis do índice) retorna ao seu retorno de chamada, perfeitamente envolvido no Promise. A eficiência da abordagem é esmagadora - quanto
mais usuários (e, portanto, mais solicitações ao VKontakte para envio),
menor o atraso na resposta. Para manter o limite sob controle, o sistema de envio possui um contador que mostra o número de solicitações restantes para este segundo, o que permite processar rapidamente uma onda de visitantes.
Aprendendo a ouvir VK
Há duas maneiras de receber notificações do VKontakte sobre eventos:
Longpoll-orders e
Callback-server . Seu servidor é conveniente, pois não requer gestos especiais para uso e também permite que você receba notificações perdidas (por exemplo, quando você reinicia o servidor). Esse servidor pode ser gravado em várias linhas usando a classe
http.Server nativa.
Tudo isso cria um ecossistema ideal para a lógica do programa, que é conveniente de usar.
Tudo acaba
Como o usuário é livre para fazer qualquer coisa no bate-papo e não podemos detê-lo, precisamos limitá-lo a uma quantidade razoável. A máquina de estado faz um ótimo trabalho, definindo todas as transições possíveis dentro do sistema e usando os botões (parâmetro do
teclado em messages.send) tornará o uso do bot tão simples quanto um simples toque na tela.
Aqui está a interação do usuário com o bot:
Tudo isso se transforma em um conjunto de estados ("Menu principal", "Entrada dos namorados" e assim por diante), cujas transições são definidas e transmitidas em botões, ou são conhecidas inicialmente e não são alteradas.
A propósito, sobre os botões. Sua gama de cores não é invariável (
4 cores para todas as ocasiões), mas são os botões que permitem minimizar o número de erros do usuário. Com base nisso, você pode criar absolutamente qualquer sistema não linear, e é por isso que eles são usados em qualquer lugar. E neste projeto também.
Mas você precisa entender: se você está visando um grande público, considere outra maneira de interagir, porque alguém pode ter um aplicativo antigo (o
VK para iPad , por exemplo, não é atualizado há muito tempo, não minto, mas parece que há mais de um ano, e suporte de teclado não existe). E acontece (sim, eu verifiquei) que as pessoas, sem perceber que os botões podem ser clicados, simplesmente reescrevem seu conteúdo (e então o parâmetro do botão de carga útil, é claro, não é transmitido e tudo pode quebrar).
Deve-se notar que nem tudo acontece da maneira mais suave, conforme descrito no diagrama, e às vezes ocorrem casos curiosos. Por exemplo, o sistema para determinar o link do VKontakte processou incorretamente os usuários cujos links curtos começaram com
id e o cortaram. A surpresa das pessoas que encontraram esse bug não pode ser descrita, porque eles escreveram Valentine Valentine, mas acabou Olezhka.
O que olezhka ????
Acidentes não são acidentais
Então, se tudo fica claro com os namorados comuns, há um destinatário e um remetente, como reduzir dois estranhos? Você precisa trocar o dia dos namorados e, se as pessoas gostam do dia dos namorados, elas devem ser apresentadas! Aqui está, a fórmula do amor!
Embora isso pareça patético, funciona e se torna mais interessante para as pessoas trabalharem com o bot - elas receberão uma resposta positiva se houver pelo menos uma pessoa (da qual, é claro, o bot cuidará).
Uma grande vantagem vem disso - quanto mais pessoas aproveitam essa oportunidade, mais chances elas têm de se conhecer e, portanto, isso, como um jogo, mantém a pessoa em um bate-papo. Vale confessar que a sessão do usuário médio é de aproximadamente 7 minutos, mas existe o potencial de restringir uma pessoa entre
10 e
15 minutos apenas por causa desse recurso.
A própria distribuição de mensagens forçou um esquema separado, uma vez que existem várias opções para usar esse bot, o usuário pode perder de vista algo e o bot o lembra com cuidado.
É interessante como o segundo problema foi resolvido, com a incapacidade da comunidade de iniciar um diálogo com o usuário primeiro: agora esse problema é resolvido com essa mensagem.
Mas eu tenho uma condição! Para que o destinatário receba seu Valentine, ele também deve escrever para mim. Sua tarefa agora é convencê-lo a me escrever alguma coisa. Isso é feito para que você não tenha medo de falar com ele!
Em geral, o tradicional "Não é um bug, mas um recurso!"
Fogos de artifício no final
Isso é tudo! Se você não levar em consideração algumas dificuldades no entendimento da lógica da API VK, além de confirmar a conta com um dos provedores, tudo correu muito bem.
Exemplo de bate-papo com um botO bot funciona e encanta as pessoas com o dia dos namorados, deixando-as felizes. Isso é feito para ajudar as pessoas a serem mais gentis umas com as outras. Você pode avaliar tudo isso sozinho na comunidade
Valentinych - vk.com/verylovebot , se desejar. Obrigado pela atenção!