Overweeg een applicatie te maken om te werken met ChatGPT. Haar taak zal zijn om spraakberichten te ontvangen via Telegram, ze om te zetten in tekst, ze door te sturen naar ChatGPT, en een antwoord terug te sturen naar Telegram. Tijdens het creatieproces moet u de volgende stappen doorlopen:

  1. Aanmaken van een bot voor Telegram en de basisinstelling ervan.
  2. Ontvangen van een bestand met een spraakbericht (Telegram gebruikt het .oga formaat).
  3. Bestand omzetten van oga naar mp3.
  4. Overdracht van het mp3 bestand naar de Whisper dienst voor conversie naar tekst.
  5. Versturen van een ontvangen tekst naar ChatGPT.
  6. Versturen van een antwoord van ChatGPT naar een gebruiker in Telegram.

Een bot maken voor Telegram en de basisinstelling ervan

Het begint allemaal met het registreren van een bot. En hiervoor gebruikt Telegram zijn eigen speciale bot - BotFather. U moet hem aanschrijven en eenvoudige stappen doorlopen.

Telegram BotFather

Als resultaat zou u een link naar uw bot en een token voor verzoeken aan zijn API moeten hebben.

Nu kunt u overgaan tot het instellen van de bot in AppMaster. De eenvoudigste manier om dit te doen is door de juiste module te installeren. U hoeft deze enkel te selecteren in de lijst van modules en uw API-token op te geven in de instellingen.

Telegram Module

De nodige modellen zullen automatisch worden gemaakt in uw project, blokken voor het werken met Telegram zal verschijnen, evenals de basis Telegram business process Telegram: Echo. Het is de moeite waard om zorgvuldig te overwegen en het werkingsprincipe te begrijpen.

Telegram Echo business process

Bij de invoer ontvangt het een bericht van Telegram (Message model). Het bevat de tekst van het verzonden bericht (text), evenals het model chat waaruit de identificatie van de afzender kan worden gehaald (id). Het laatste blok Telegram: Send Message stuurt het ontvangen bericht terug naar de afzender, maar namens de bot.

U kunt dit bedrijfsproces gebruiken voor het eerste testen van de bot en de communicatie ermee. Hiervoor moet u een endpoint aanmaken dat informatie ontvangt en een bedrijfsproces start.

Telegram bot endpoint

Bij het aanmaken ervan is het belangrijk om het volgende uit te schakelen Middleware Token Auth. Het endpoint moet openstaan voor gebruik zonder autorisatie.

Het werkingsprincipe van de Telegram bot is vrij eenvoudig - alle berichten die naar hem worden gestuurd gaan naar een speciale webhook, die ze automatisch verder kan doorgeven en naar het eindpunt van uw keuze kan sturen voor verdere acties.

De laatste stap blijft dus het activeren van de bot - u moet dit endpoint registreren in Telegram en aangeven dat deze bot ermee geassocieerd moet worden. Hiervoor moet u een POST-request met de volledige endpoint-URL en met vermelding van uw bot-token in plaats van {Bot API Token} sturen naar het adres

https://api.telegram.org/bot{Bot API Token}/setWebhook

Als u zo'n bericht als antwoord krijgt, dan is alles correct verlopen.

 {

    "ok": true,

    "result": true,

    "description": "Webhook was set"

}

Post Telegram Webhook

De bot is klaar om te werken, u kunt hem een bericht sturen en terugkrijgen.

Een bestand ontvangen met een spraakbericht

De module Telegram is in de eerste plaats ontworpen voor het werken met tekstberichten. En onze taak is om een bestand met een spraakbericht te ontvangen. Met AppMaster kunt u dit probleem gemakkelijk oplossen. Eerst moeten we analyseren wat we doorgaans ontvangen van Telegram om de structuur van het bericht te ontleden. Het blok Get Request Body blok is hiervoor ontworpen. Het elimineert de noodzaak om de verzoekstructuur van tevoren te specificeren en stelt u in staat het gehele verzoek te ontvangen, ongeacht de inhoud ervan. Dit blok stuurt het verzoekresultaat terug als een set bytes, en u kunt het To String blok gebruiken om het resultaat in een voor mensen leesbare vorm te presenteren, en om het op te slaan in logboeken (Write to Log blok) voor verdere analyse.

Telegram Request log

Wij zijn geïnteresseerd in twee parameters van het gehele verzoek:

Sender ID - in het verzoek gespecificeerd als "id":300493858
File ID - "file_id":"AwACAgIAAxkBAAMzZBk6QRvO-OYWsWUC-Bu1UXDM2FwAAkktAAKTZclIWTSkfTTw8wYvBA"

U kunt uw eigen model maken dat overeenkomt met het verzoek en het gebruiken om de vereiste velden te verkrijgen. Maar het zal sneller zijn om een reguliere expressie (Regex) te maken en die te gebruiken. Hiervoor neemt het String Match Regex blok de expressie zelf als invoer, evenals de string waarin de match met de gegeven expressie wordt gecontroleerd.

In het eerste geval is de uitdrukking "id":"\d+

Als resultaat krijgen we de string "id":300493858, waaruit we de extra ("id":) moeten verwijderen met behulp van het blok Replace String en alleen de identifier zelf overhouden.

In het tweede geval is het principe precies hetzelfde, maar wordt een iets complexere expressie gebruikt: "file_id":"[^"]+

Regex to get request ID

Nu hebben we het afzender-id en het bestands-id, en dat kunnen we gebruiken om het bestand zelf te krijgen. Hiervoor moet je je wenden tot de Telegram API. Dit is al eerder gedaan bij het registreren van het eindpunt van de bot. Nu moet u een soortgelijk verzoek doen om het bestand te krijgen. {File ID} in de verzoek-URL moet worden vervangen door het ontvangen bestands-id.

https://api.telegram.org/bot{Bot API Token}/setWebhook/getFile?file_id={File ID}

Om een verzoek te versturen en het resultaat ervan te ontvangen, gebruiken we het HTTP Request blok, met URL en Method = GET als parameters.

Telegram File Request

Uit het ontvangen antwoord kun je het relatieve pad naar het bestand opmaken, het wordt doorgegeven in de "file_path" parameter. Dienovereenkomstig kunt u met de volgende reguliere uitdrukking ("file_path":"[^"]+) de gewenste waarde eruit halen en verbinden met "https://api.telegram.org/file/bot{Bot API Token}/" om de volledige link naar het bestand te krijgen.

Bestand omzetten van OGA naar MP3

Het bestand is ontvangen, maar het obstakel is dat de Whisper service het werken met het OGA formaat. U moet converteren naar een van de geschikte formaten.

Als voorbeeld wordt de Zamzar dienst gebruikt (zijn gratis plan ondersteunt de mogelijkheid om 100 conversies per maand uit te voeren) en converteert naar MP3.

U kunt de documentatie ervan raadplegen voor details of een andere soortgelijke dienst gebruiken. Wij zullen het werk ermee niet in detail analyseren, en alleen het deel dat rechtstreeks betrekking heeft op de uitvoering van AppMaster in beschouwing nemen.

Allereerst heeft het verzoek de juiste authenticatiegegevens nodig. Deze moeten worden verstrekt in het Basic Authentication formaat. Daartoe moet in het verzoek een header met waarden worden doorgegeven:

Key = 'Authorization'

Value = 'Basic '+ Gebruikers-ID en wachtwoord gescheiden door ":" in base64 formaat

De API-sleutel die wordt verkregen bij de registratie bij de dienst is de gebruikers-ID. Je moet er ":" aan toevoegen en het coderen in Base64 formaat met behulp van het To Base64 blok. Het resultaat moet worden omgezet in een header (Make Key-Value (String) blok).

Zamzar Auth Header

De volgende stap is het maken van een model voor de query in de database designer. Het verzoek moet worden verzonden in het Multipart Form formaat, respectievelijk is het nodig een model te maken van de vorm van dit verzoek. In ons voorbeeld bestaat het model uit drie velden van het type String:

  • source_file - het volledige pad naar het bronbestand (geleerd in de vorige stap).
  • source_format - bronbestandsformaat, in dit voorbeeld een vaste waarde "ogg".
  • target_format - doelformaat voor conversie. U kunt elk formaat kiezen dat wordt ondersteund door Whisper. Laten we als voorbeeld "mp3" nemen.

Zamzar Request Model

In de bedrijfsproces-editor moet u het Make blok de modelgegevens invullen en deze als een POST verzoek naar https://sandbox.zamzar.com/v1/jobs/ sturen met behulp van het HTTP Request blok (zorg ervoor dat u specificeert Serialize request body = Multipart Form).

Zamzar Conversion Request

Opgemerkt zij dat dit verzoek niet het geconverteerde bestand teruggeeft, maar alleen een taak creëert om het te converteren. U moet het resultaat afzonderlijk aanvragen; daarvoor hebt u de ID van de aangemaakte taak nodig. Deze ID moet worden verkregen uit de body van het antwoord op het verzoek, en hiervoor moet het reeds uitgewerkte proces worden uitgevoerd met behulp van reguliere expressies en het extraheren van de id-waarde.

Het resultaat van de omzetting moet afzonderlijk worden toegepast. Hiervoor zijn nog twee verzoeken nodig. De eerste is om uit te zoeken of het resultaat klaar is. De tweede is om het voltooide bestand op te halen. Tegelijkertijd weten we het exacte tijdstip van gereedheid niet, dus kunnen we een lus organiseren die met bepaalde tussenpozen (bijvoorbeeld elke seconde) herhaalde verzoeken stuurt om de gereedheid te controleren.

Zamzar Conversion Check Loop

Een HTTP Request moet worden verzonden met de methode GET naar de URL https://sandbox.zamzar.com/v1/jobs/{id}, waarbij {id} de in de vorige stap verkregen taak-id is. Hierbij worden dezelfde headers gebruikt als in het vorige verzoek.

Uit het ontvangen antwoord moet de gereedheidsstatus blijken. Als de conversie is voltooid, bevat het antwoord "status": "successful" en voor ons is dit een signaal dat we de lus kunnen voltooien en verder kunnen gaan.

Naast de status moet het antwoord ook de ID van het voltooide bestand bevatten ("target_files":[{"id":). Deze moet worden geëxtraheerd om de definitieve link naar het bestand te krijgen in de vorm https://sandbox.zamzar.com/v1/files/{ID}/content

Tegelijkertijd is het ontvangen van een bestand alleen beschikbaar voor geautoriseerde gebruikers, dus moet u een HTTP Request uitvoeren met dezelfde headers als in eerdere verzoeken.

Als resultaat van het verzoek wordt de inhoud van het bestand verkregen, dat een naam moet krijgen en moet worden opgeslagen voor verder gebruik.

Zamzar save converted file

Verzenden van een MP3 bestand naar Whisper voor conversie naar tekst

Nu is alles klaar voor de volgende stap - het verzenden van een bestand met een spraakbericht voor herkenning. Hiervoor is nog een verzoek nodig in het Multipart Form formaat. Alleen in tegenstelling tot het vorige voorbeeld zal het verzoek het bestand zelf moeten overbrengen en niet een link ernaar.

Een model voor een dergelijk verzoek kan worden gemaakt in de External HTTP Request sectie. In dit geval kunt u geen volledig verzoek maken, maar beperkt u zich tot het maken van een model voor het verzoeklichaam. Het model zelf bestaat uit twee parameters:

  1. File (Virtual File type) - hetzelfde bestand dat moet worden herkend.
  2. model (type String) - hier geven we de waarde whisper-1.

Whisper request model

Ook, voor het verzoek, is het noodzakelijk om een sleutel voor het werken met de OpenAI API en het genereren van een autorisatie header van het Bearer Token type.

Key = 'Authorization'

Value = 'Bearer '+ OpenAI API Key

Vervolgens stuurt u het POST verzoek zelf om het spraakbericht te herkennen naar de Whisper service op de URL https://api.openai.com/v1/audio/transcriptions

Whisper HTTP Request

Als gevolg van een succesvolle herkenning van het bestand, zal een antwoord worden ontvangen in de vorm {"text": "Hello world.”}

Het verzenden van een ontvangen tekst naar ChatGPT

U kunt verder gebruik maken van HTTP Request blokken om een verzoek te sturen naar ChatGPT. Om de API documentatie te verkennen, maar ook zelfstandig modellen te maken voor verzoeken en antwoorden. Maar u kunt ook een eenvoudiger optie gebruiken in de vorm van een kant-en-klare module van AppMaster voor het werken met OpenAI, die moet worden geïnstalleerd in de sectie modules.

OpenAI Module

In de minimaal voldoende versie hoeft u alleen de parameters van het OAI ChatCompletionMessage model (role = user, content = te verzenden bericht), toe te voegen aan de array, en een verzoek te sturen naar ChatGPT met het OpenAI: Create Chat Completion blok (set parameter model = gpt-4).

OpenAI Request

Als resultaat krijgen we een antwoord van ChatGPT. We lezen het uit de content parameter van het OAI ChatCompletionChoice model.

ChatGPT Response

Een antwoord sturen van ChatGPT naar een gebruiker in Telegram

De laatste stap is alleen herhalen wat al eerder is gedaan - een bericht sturen naar Telegram. Maar als we begonnen met het bericht gewoon terug te sturen naar de afzender, heeft dit bericht nu een reeks verschillende acties gestart en wordt het resultaat teruggestuurd als een antwoord van ChatGPT.

Telegram send ChatGPT response

Bij de ontwikkeling van een dergelijke bot is het de moeite waard te overwegen:

  1. Telegram werkt zodanig dat elk verzoek dat door de bot wordt verzonden, met succes moet worden verwerkt. Anders zal hij het vele malen proberen te herhalen, wat betekent dat u bij eventuele problemen steeds weer het antwoord krijgt. Zorg ervoor dat de logica zo is opgebouwd dat het verzoek niet tot een fout leidt en succesvol kan worden verwerkt.
  2. Niet alle verzoeken zullen bij de eerste poging werken zoals bedoeld. U zult naar fouten moeten zoeken, en daarvoor moet u naar Write to Log blokken. Die zijn zowel nuttig om te controleren of elk blok daadwerkelijk de gegevens ontvangt die u van plan was te verzenden, als om het resultaat van het blok te analyseren en het antwoord in detail te bestuderen.
  3. In de handleiding zijn we ervan uitgegaan dat alle verzoeken voorspelbaar en succesvol zijn en dat het proces vrij lineair verloopt. In de praktijk zal het nodig zijn om verschillende opties te bieden voor acties (bijvoorbeeld wat te doen als de gebruiker een tekstbericht stuurt in plaats van een spraakbericht of zelfs een foto) en foutafhandeling (controleren van de status van HTTP-verzoeken, rekening houden met verschillende antwoordopties).
Was this article helpful?

AppMaster.io 101 Spoedcursus

10 modules
2 weken

Weet je niet waar je moet beginnen? Ga aan de slag met onze spoedcursus voor beginners en verken AppMaster van A tot Z.

Start cursus
Development it’s so easy with AppMaster!

Meer hulp nodig?

Los elk probleem op met de hulp van onze experts. Bespaar tijd en focus op het bouwen van uw applicaties.

headphones

Contact opnemen met ondersteuning

Vertel ons over uw probleem, en we zullen een oplossing voor u vinden.

message

Community-chat

Bespreek vragen met andere gebruikers in onze chat.

Word lid van de community