{"id":20341865,"url":"https://github.com/douglaszuqueto/telegram-queue-service","last_synced_at":"2026-06-04T02:31:14.074Z","repository":{"id":91302874,"uuid":"171731447","full_name":"douglaszuqueto/telegram-queue-service","owner":"douglaszuqueto","description":"Telegram Queue Service","archived":false,"fork":false,"pushed_at":"2019-02-24T22:08:02.000Z","size":7123,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2024-08-08T09:51:03.870Z","etag":null,"topics":["amqp","golang","rabbitmq","telegram"],"latest_commit_sha":null,"homepage":"https://github.com/douglaszuqueto/telegram","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/douglaszuqueto.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null}},"created_at":"2019-02-20T18:58:13.000Z","updated_at":"2019-02-24T22:08:04.000Z","dependencies_parsed_at":"2024-04-08T04:09:32.197Z","dependency_job_id":null,"html_url":"https://github.com/douglaszuqueto/telegram-queue-service","commit_stats":null,"previous_names":["douglaszuqueto/telegram"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Ftelegram-queue-service","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Ftelegram-queue-service/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Ftelegram-queue-service/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/douglaszuqueto%2Ftelegram-queue-service/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/douglaszuqueto","download_url":"https://codeload.github.com/douglaszuqueto/telegram-queue-service/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":241868886,"owners_count":20033919,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["amqp","golang","rabbitmq","telegram"],"created_at":"2024-11-14T21:29:33.016Z","updated_at":"2026-01-12T02:37:27.291Z","avatar_url":"https://github.com/douglaszuqueto.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Telegram Queue Service\n\n## Projeto\n\nEsse projeto tem como objetivo começar a explorar o Message Broker **RabbitMQ**. Por hora, será um simples projeto, onde através da integração com serviços terceiros (meus serviços por exemplo) eu enviarei uma mensagem(contexto de notificação) para a fila, onde posteriormente o *microservice* irá consumir tal fila, assim, fazendo com que a mensagem enfim chegue ao **Telegram**.\n\n## Organização deste repositório\n\nComo mencionado acima, teremos o principal serviço consumindo a fila do rabbitmq. Também teremos uma pasta denominada *examples*, onde terá um simples exemplo de integração.\n\n### Exemplo\n\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\t\"log\"\n\t\"os\"\n\t\"time\"\n\n\tqueueService \"github.com/douglaszuqueto/telegram/queue\"\n)\n\nfunc main() {\n\tconfigQueue := queueService.Config{\n\t\tIP:       os.Getenv(\"RABBITMQ_IP\"),\n\t\tPort:     os.Getenv(\"RABBITMQ_PORT\"),\n\t\tUsername: os.Getenv(\"RABBITMQ_USERNAME\"),\n\t\tPassword: os.Getenv(\"RABBITMQ_PASSWORD\"),\n\t}\n\n\tqueue, err := queueService.New(\u0026configQueue)\n\tif err != nil {\n\t\tlog.Panic(err.Error())\n\t}\n\n\tdefer queue.Stop()\n\n\tvar counter int\n\n\tfor {\n        msg := fmt.Sprintf(\"*Message*: %v\", counter)\n\n        err = queue.SendMessage(msg)\n        if err != nil {\n            log.Panic(err.Error())\n        }\n\n        log.Printf(\"Sending message: %v\", msg)\n        counter++\n\n        time.Sleep(5 * time.Second)\n    }\n}\n```\n\nNo exemplo, nada mais é que um laço infinito com um contador e um tempo para ficar enviando as mensagens ao Telegram à cada 5 segundos.\n\n\n## Variáveis de ambiente - environment\n\nAs variáveis abaixo, para conhecimento serão de escopo global - serão utilizadas no serviço principal como também no exemplo de integração.\n\n```\nRABBITMQ_IP=0.0.0.0\nRABBITMQ_PORT=5672\nRABBITMQ_USERNAME=guest\nRABBITMQ_PASSWORD=guest\n\nTELEGRAM_TOKEN=9876543210\nTELEGRAM_CHATID=123456789\n```\n\n## Como executar o projeto?\n\nAmbos serviços - produtor/consumidor estarão dentro de uma pasta bin - foi compilado e esta pronto para serem executados. Por enquanto os serviços foram compilados para o distros baseadas em Linux e possui versões *amd64* e *ARM*, portanto é possível rodar todos os serviços na Raspberry.\n\nPor questão de facilidade, eu recomendo que você faça o download desse repositório através do **GIT** ou clicando em *Download* aqui no Github mesmo :)\n\n### Requisítos minimos\n\n* Ter uma instáncia do RabbitMQ rodando. Seja no seu computador, Docker, na Raspberry ou até mesmo no [Cloud AMQP](https://www.cloudamqp.com/) caso não queira instalar o serviço\n* Possuir um *bot* no telegram;\n\n### Rodando o serviço principal\nComo citado anteriormente, você precisa das variáveis de ambiente declaradas. Você pode criar um arquivo exportando as variáveis ou rodar cada serviço com as mesmas de forma inline.\n\n#### Ex. 1:\nCrie um arquivo .env(ou com o nome de sua escolha) e coloque o conteúdo abaixo - não esqueça de colocar os valores corretamente.\n\n```\nexport RABBITMQ_IP=0.0.0.0\nexport RABBITMQ_PORT=5672\nexport RABBITMQ_USERNAME=guest\nexport RABBITMQ_PASSWORD=guest\n\nexport TELEGRAM_TOKEN=9876543210\nexport TELEGRAM_CHATID=123456789\n```\nCom o arquivo criado o que você precisa é exportar de fato as variáveis. Para isso basta rodar o comando **source .env**. Agora você pode rodar o binário:\n\n```\n./bin/telegram-service-amd64\n```\n\nSe quiser executar na raspberry, não esqueça de pegar a versão *arm* dos binários.\n\n#### Ex. 2:\nDe forma inline...\n\n```\nRABBITMQ_IP=0.0.0.0 RABBITMQ_PORT=5672 RABBITMQ_USERNAME=guest RABBITMQ_PASSWORD=guest TELEGRAM_TOKEN=9876543210 TELEGRAM_CHATID=123456789 ./bin/telegram-service-amd64\n```\n\n### Rodando o exemplo\n\nO procedimento para executar o exemplo serão as mesmas do passo anterior - muda apenas o diretório de onde o binário produtor se encontra.\n\n```\nexport RABBITMQ_IP=0.0.0.0\nexport RABBITMQ_PORT=5672\nexport RABBITMQ_USERNAME=guest\nexport RABBITMQ_PASSWORD=guest\n```\n\n```\nsource .env\n\n./examples/amqp/bin/telegram-amqp-amd64\n```\n\nou...\n\n```\nRABBITMQ_IP=0.0.0.0 RABBITMQ_PORT=5672 RABBITMQ_USERNAME=guest RABBITMQ_PASSWORD=guest ./examples/amqp/bin/telegram-amqp-amd64\n```\n\n**Obs** No serviço produtor é utilizado apenas as variavéis referente ao RabbitMQ.\n\n\n## Diagrama de funcionamento\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/telegram-queue-service/master/.github/diagram-example.png)\n\nComo você pode observar, temos 3 etapas que ocorrem quando uma simples mensagem é enviada.\n\n* 1º - Producer =\u003e Exchange: Aqui a exchange é a porta de entrada, toda mensagem vai para essa camada e depois é roteada para a(s) fila(s)\n* 2º - Exchange =\u003e Queue: Nesta etapa, de fato a mensagem chega na fila, pronta para ser consumida por seu(s) consumer(s)\n* 3º - Queue =\u003e Consumer: Na finaleira temos o consumer, aqui a mensagem chega e é aplicada a regra de negócio que for. No contexto atual - a mensagem que chega é enviada para o *Telegram* através de sua API\n\n### Exemplo de diagrama um pouco mais complexo \n\nNo diagrama abaixo, é um pouco mais completo do que realmente esse projeto faz. Mas serve de base para saber das possibilidades. \n\nPor exemplo: Além dos alertas enviados ao telegram, poderiamos ter mais 2 serviços. Um cadastrando as mensagens no banco de dados e outro salvando em um arquivo de log(texto).\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/telegram-queue-service/master/.github/diagram.png)\n\n## Resultado final\n\n### Serviço principal \u0026 Exemplo\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/telegram-queue-service/master/.github/screenshot_3.png)\n\n### Mensagem recebida no telegram\n\n![img](https://raw.githubusercontent.com/douglaszuqueto/telegram-queue-service/master/.github/screenshot.png)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Ftelegram-queue-service","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdouglaszuqueto%2Ftelegram-queue-service","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdouglaszuqueto%2Ftelegram-queue-service/lists"}