Skip to content

Aplikacja wykorzystująca Appwrite, Twilio i .NET do wykonania telefonu odtwarzającego utwór Krzysztofa Krawczyka - Parostatek

Notifications You must be signed in to change notification settings

kjurkiew/Parostatkiem

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

17 Commits
 
 
 
 
 
 

Repository files navigation

🚢 Parostatkiem z Appwrite, Twilio i .NET

Jakiś czas temu natrafiłem na ciekawy artykuł w którym autor opisał jak za pomocą Appwrite, Twilio i .NET stworzyć aplikację, która dzwoni na wybrany numer i puszcza Rick Rolla. Postanowiłem przerobić ją tak aby puszczała hit Krzysztofa Krawczyka - Parostatek.

🎶 Efekt końcowy

Ze względu na darmowe konto Twilio tuż przed uruchomieniem kodu prezentowany jest komunikat.

parostatkiem.mp4

📃 Warunki wstępne

Serwer - Postawiłem na mikr.us wybierając serwer 3.0. Wymogiem do sprawnego działania Appwrite jest co najmniej 2 GB ramu. Z serwerem łączę się za pomocą PuTTY

Docker - Zainstalowałem go korzystając z dokumentacji dockera

Appwrite - Cały poradnik jest na stronie Appwrite, w dużym skrócie wystarczy wpisać:

docker run -it --rm \
    --volume /var/run/docker.sock:/var/run/docker.sock \
    --volume "$(pwd)"/appwrite:/usr/src/code/appwrite:rw \
    --entrypoint="install" \
    appwrite/appwrite:1.3.8

Instalując Appwrite, wybrałem domyślne porty a następnie podpiąłem serwer pod darmową subdomene mikur.us - bieda.it. Po zainstalowaniu należy wejść na naszą stronę i stworzyć nowe konto admina Appwrite

Aby zainstalować CLI Appwrite wystarczy wpisać:

curl -sL https://appwrite.io/cli/install.sh | bash

Cała dokumentacja CLI znajduje się tutaj

Ważne! Aby włączyć środowisko .NET dla Appwrite należy wejść do katalogu Appwrite, edytować plik .env np. za pomocą edytora nano, znaleźć w pliku .env zmienną środowiskową '_APP_FUNCTIONS_RUNTIMES' i do listy oddzielonej przecinkami dodać 'dotnet-6.0'. Aby wgrać nową konfigurację należy skorzystać z polecenia:

docker-compose up -d

Twilio - należy zarejestrować się na stronie Twilio gdzie otrzymamy darmowe konto oraz numer telefonu. Z darmowego konta możemy dzwonić tylko na zweryfikowane numery telefonów. Trzeba też pamiętać aby pozwolić aplikacji dzwonić do naszego kraju. Całość można ustawić tutaj

🔧 Konfigurowanie Appwrite

Aby utworzyć funkcję w Appwrite, która pozwoli nam na "rejs parostatkiem", potrzebujemy najpierw zalogować się do interfejsu CLI Appwrite za pomocą polecenia:

appwrite login
? Enter your email adres@mailowy.com
? Enter your password ********
✓ Success

Następnie tworzymy nowy projekt Appwrite za pomocą polecenia:

appwrite init project
? How would you like to start? Create a new Appwrite project
? What would you like to name your project? Projekt Krzysztof
? What ID would you like to have for your project? unique()
✓ Success

Inicjujemy funkcję wybierając środowisko wykonawcze .NET 6.0:

appwrite init function
? What would you like to name your function? Parostatek
? What ID would you like to have for your function? unique()
? What runtime would you like to use? .NET (dotnet-6.0)
✓ Success

📑 Tworzenie funkcji

Odwiedź utworzony katalog functions/Parostatek Struktura plików wygląda w nim następująco:

Parostatek
├── Function.csproj 
|
└── src
    └── Index.cs

Edytuj plik src/Index.cs i wprowadź w nim następujący kod:

using System.Collections.Generic;
using System.Threading.Tasks;
using Newtonsoft.Json;
using Twilio;
using Twilio.Types;
using Twilio.Rest.Api.V2010.Account;

public async Task<RuntimeResponse> Main(RuntimeRequest req, RuntimeResponse res)
{
  // Konwertuj ładunek JSON na słownik i odczytaj numer telefonu do wywołania.
  var payload = JsonConvert.DeserializeObject<Dictionary<string, string>>(req.Payload);
  var toPhoneNumber = payload["phoneNumber"];

  // Pobierz identyfikator konta (SID), token uwierzytelniający (Auth Token) oraz numer telefonu Twilio z zmiennych środowiskowych.
  var accountSID = req.Variables["TWILIO_ACCOUNTSID"];
  var authToken = req.Variables["TWILIO_AUTHTOKEN"];
  var twilioPhoneNumber = req.Variables["TWILIO_PHONENUMBER"];

  //Inicjalizuj bibliotekę SDK Twilio.
  TwilioClient.Init(accountSID, authToken);

  // Stwórz połączenie telefoniczne przy użyciu interfejsu API głosowego Twilio
  var call = CallResource.Create(
                to: new PhoneNumber(toPhoneNumber),
                from: new PhoneNumber(twilioPhoneNumber),
                twiml: new Twiml("<Response><Play>https://magenta-iguana-8031.twil.io/assets/01%20Krzysztof%20Krawczyk%20-%20Parostatek.mp3</Play></Response>") 
             );

  // Zwróć odpowiedź z biblioteki SDK Twilio.
  return res.Json(new()
  {
    { "twilioResponse", call }
  });
}

Aby mieć pewność, że biblioteka Newtonsoft.Json i Twilio będzie zainstalowana przez Appwrite musimy uwzględnić je w pliku Function.csproj

<ItemGroup>
    <PackageReference Include="Newtonsoft.Json" Version="13.0.1" />
    <PackageReference Include="Twilio" Version="5.75.2" />
</ItemGroup>

Funkcję możemy wdrożyć za pomocą konsoli i polecenia

appwrite deploy function

Bądź manualnie. W tym celu otwieramy katalog w którym znajduje się nasza funkcja Parostatek i pakujemy ją za pomocą polecenia:

tar -czf code.tar.gz --exclude code.tar.gz .

Do przerzucenia pliku z serwera na mój komputer skorzystałem z programu WinSCP

Wchodzimy na naszą stronę, wybieramy projekt Krzysztof, funkcję Parostatek i klikamy "+Create deployment" 2 W Entrypoint wpisujemy:

src/Index.cs

Wrzucamy spakowany plik code.tar.gz Zaznaczamy Activate deployment after build

Ostatnią rzeczą, którą musimy zrobić, zanim będziemy mogli przetestować funkcję, jest dodanie niezbędnych zmiennych środowiskowych do strony Ustawienia funkcji. Zrobimy to klikając w Settings

TWILIO_ACCOUNTSID: Identyfikator SID konta Twilio

TWILIO_AUTHTOKEN: Token uwierzytelniania Twilio

TWILIO_PHONENUMBER: Numer telefonu Twilio

3

Wszystko już gotowe!

📲 Uruchomienie funkcji

Wybieramy Execute now i wpisujemy

{
    "phoneNumber": "+48123456789"
}

I możemy cieszyć się dźwiękiem Parostatku 🐳

Odpowiedź z Twilio SDK znajdziemy w logach funkcji

{
  "twilioResponse": {
    "Sid": "CA1f810e5fd5e83cc193467...",
    "DateCreated": null,
    "DateUpdated": null,
    "ParentCallSid": null,
    "AccountSid": "...",
    "To": "+48123456789",
    "ToFormatted": "+48123456789",
    "From": "+1218452...",
    "FromFormatted": "(218) 452-...",
    "PhoneNumberSid": "PN58...",
    "Status": [],
    "StartTime": null,
    "EndTime": null,
    "Duration": null,
    "Price": null,
    "PriceUnit": "USD",
    "Direction": "outbound-api",
    "AnsweredBy": null,
    "ApiVersion": "2010-04-01",
    "ForwardedFrom": null,
    "GroupSid": null,
    "CallerName": null,
    "QueueTime": "0",
    "TrunkSid": null,
    "Uri": "/2010-04-01/Accounts/....json",
    "SubresourceUris": {
      "feedback": "/2010-04-01/Accounts/.../Feedback.json",
      "user_defined_messages": "/2010-04-01/Accounts/.../UserDefinedMessages.json",
      "notifications": "/2010-04-01/Accounts/.../Notifications.json",
      "recordings": "/2010-04-01/Accounts/.../Recordings.json",
      "streams": "/2010-04-01/Accounts/.../Streams.json",
      "payments": "/2010-04-01/Accounts/.../Payments.json",
      "user_defined_message_subscriptions": "/2010-04-01/Accounts/.../UserDefinedMessageSubscriptions.json",
      "siprec": "/2010-04-01/Accounts/.../Siprec.json",
      "events": "/2010-04-01/Accounts/.../Events.json",
      "feedback_summaries": "/2010-04-01/Accounts/.../Calls/FeedbackSummary.json"
    }
  }
}

About

Aplikacja wykorzystująca Appwrite, Twilio i .NET do wykonania telefonu odtwarzającego utwór Krzysztofa Krawczyka - Parostatek

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages