{"id":13509506,"url":"https://github.com/danielberkompas/ex_twilio","last_synced_at":"2025-05-15T01:09:05.883Z","repository":{"id":29474309,"uuid":"33010983","full_name":"danielberkompas/ex_twilio","owner":"danielberkompas","description":"Twilio API client for Elixir","archived":false,"fork":false,"pushed_at":"2024-04-28T23:49:28.000Z","size":454,"stargazers_count":342,"open_issues_count":27,"forks_count":150,"subscribers_count":11,"default_branch":"master","last_synced_at":"2025-05-03T01:51:08.139Z","etag":null,"topics":["elixir","hex","twilio"],"latest_commit_sha":null,"homepage":"","language":"Elixir","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielberkompas.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE.md","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,"publiccode":null,"codemeta":null}},"created_at":"2015-03-27T21:58:14.000Z","updated_at":"2025-05-02T01:09:16.000Z","dependencies_parsed_at":"2024-01-05T21:59:37.203Z","dependency_job_id":"7c3abb8d-1780-4331-ae27-24479e95827a","html_url":"https://github.com/danielberkompas/ex_twilio","commit_stats":{"total_commits":334,"total_committers":52,"mean_commits":6.423076923076923,"dds":"0.40718562874251496","last_synced_commit":"8378ee56ffd1925aa3fa1c0d432ab262963b42a6"},"previous_names":[],"tags_count":26,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielberkompas%2Fex_twilio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielberkompas%2Fex_twilio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielberkompas%2Fex_twilio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielberkompas%2Fex_twilio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielberkompas","download_url":"https://codeload.github.com/danielberkompas/ex_twilio/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254043218,"owners_count":22004912,"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":["elixir","hex","twilio"],"created_at":"2024-08-01T02:01:08.721Z","updated_at":"2025-05-15T01:09:00.857Z","avatar_url":"https://github.com/danielberkompas.png","language":"Elixir","funding_links":[],"categories":["Third Party APIs","Elixir"],"sub_categories":[],"readme":"ExTwilio\n========\n\n[![Hex.pm](https://img.shields.io/hexpm/v/ex_twilio.svg)](https://hex.pm/packages/ex_twilio)\n[![Build Status](https://danielberkompas.semaphoreci.com/badges/ex_twilio/branches/master.svg?style=shields)](https://danielberkompas.semaphoreci.com/projects/ex_twilio)\n[![Inline docs](http://inch-ci.org/github/danielberkompas/ex_twilio.svg?branch=master)](http://inch-ci.org/github/danielberkompas/ex_twilio)\n[![Module Version](https://img.shields.io/hexpm/v/ex_twilio.svg)](https://hex.pm/packages/xxx)\n[![Hex Docs](https://img.shields.io/badge/hex-docs-lightgreen.svg)](https://hexdocs.pm/ex_twilio/)\n[![Total Download](https://img.shields.io/hexpm/dt/ex_twilio.svg)](https://hex.pm/packages/xxx)\n[![License](https://img.shields.io/hexpm/l/ex_twilio.svg)](https://github.com/danielberkompas/xxx/blob/master/LICENSE)\n[![Last Updated](https://img.shields.io/github/last-commit/danielberkompas/ex_twilio.svg)](https://github.com/danielberkompas/xxx/commits/master)\n\nExTwilio is a relatively full-featured API client for the Twilio API.\n\n## Installation\n\nExTwilio is currently beta software. You can install it from Hex:\n\n```elixir\ndef deps do\n  [\n    {:ex_twilio, \"~\u003e 0.10.0\"}\n  ]\nend\n```\n\nOr from Github:\n\n```elixir\ndef deps do\n  [\n    {:ex_twilio, github: \"danielberkompas/ex_twilio\"}\n  ]\nend\n```\n\nand run `mix deps.get`.\n\n\nIf using Elixir 1.3 or lower add `:ex_twilio` as a application dependency:\n\n```elixir\ndef application do\n  [\n    applications: [:ex_twilio]\n  ]\nend\n```\n\n## Configuration\n\nYou will need to set the following configuration variables in your\n`config/config.exs` file:\n\n```elixir\nimport Config\n\nconfig :ex_twilio, account_sid:   {:system, \"TWILIO_ACCOUNT_SID\"},\n                   auth_token:    {:system, \"TWILIO_AUTH_TOKEN\"},\n                   workspace_sid: {:system, \"TWILIO_WORKSPACE_SID\"} # optional\n```\n\nFor security, I recommend that you use environment variables rather than hard\ncoding your account credentials. If you don't already have an environment\nvariable manager, you can create a `.env` file in your project with the\nfollowing content:\n\n```bash\nexport TWILIO_ACCOUNT_SID=\u003caccount sid here\u003e\nexport TWILIO_AUTH_TOKEN=\u003cauth token\u003e\nexport TWILIO_WORKSPACE_SID=\u003cworkspace sid here\u003e #optional\n```\n\nThen, just be sure to run `source .env` in your shell before compiling your\nproject.\n\n### Multiple Environments\nIf you want to use different Twilio credentials for different environments, then\ncreate separate Mix configuration files for each environment. To do this, change\n`config/config.exs` to look like this:\n\n```elixir\n# config/config.exs\n\nimport Config\n\n# shared configuration for all environments here ...\n\nimport_config \"#{Mix.env}.exs\"\n```\n\nThen, create a `config/#{environment_name}.exs` file for each environment. You\ncan then set the `config :ex_twilio` variables differently in each file.\n\n## Usage\n\nExTwilio comes with a module for each supported Twilio API resource. For example,\nthe \"Call\" resource is accessible through the `ExTwilio.Call` module. Depending\non what the underlying API supports, a resource module may have the following\nmethods:\n\n| Method      | Description                                                       |\n|-------------|-------------------------------------------------------------------|\n| **all**     | Eager load all of the resource items on all pages. Use with care! |\n| **stream**  | Create a Stream of all the items. Use like any Stream.            |\n| **find**    | Find a resource given its SID.                                    |\n| **create**  | Create a resource.                                                |\n| **update**  | Update a resource.                                                |\n| **destroy** | Destroy a resource.                                               |\n\nResource modules may contain their own custom methods. If the underlying API\nendpoint does not support an action, the related method will _not_ be available\non that module.\n\n### Supported Endpoints\n\nExTwilio currently supports the following Twilio endpoints:\n\n- [Account](https://www.twilio.com/docs/api/2010-04-01/rest/account). Including SubAccounts.\n- [Address](https://www.twilio.com/docs/api/2010-04-01/rest/addresses)\n    - [DependentPhoneNumber](https://www.twilio.com/docs/api/2010-04-01/rest/addresses#instance-subresources)\n- [Application](https://www.twilio.com/docs/api/2010-04-01/rest/applications)\n- [AuthorizedConnectApp](https://www.twilio.com/docs/api/2010-04-01/rest/authorized-connect-apps)\n- [AvailablePhoneNumber](https://www.twilio.com/docs/api/2010-04-01/rest/available-phone-numbers)\n- [Call](https://www.twilio.com/docs/api/2010-04-01/rest/call)\n    - [Feedback](https://www.twilio.com/docs/api/2010-04-01/rest/call-feedback)\n- [Conference](https://www.twilio.com/docs/api/2010-04-01/rest/conference)\n    - [Participant](https://www.twilio.com/docs/api/2010-04-01/rest/participant)\n- [ConnectApp](https://www.twilio.com/docs/api/2010-04-01/rest/connect-apps)\n- [IncomingPhoneNumber](https://www.twilio.com/docs/api/2010-04-01/rest/incoming-phone-numbers)\n- [Message](https://www.twilio.com/docs/api/2010-04-01/rest/message)\n    - [Media](https://www.twilio.com/docs/api/2010-04-01/rest/media)\n- [Notification](https://www.twilio.com/docs/api/notifications/rest)\n- [OutgoingCallerId](https://www.twilio.com/docs/api/2010-04-01/rest/outgoing-caller-ids)\n- [Queue](https://www.twilio.com/docs/api/2010-04-01/rest/queue)\n    - [Member](https://www.twilio.com/docs/api/2010-04-01/rest/member)\n- [Recording](https://www.twilio.com/docs/api/2010-04-01/rest/recording)\n- [ShortCode](https://www.twilio.com/docs/api/2010-04-01/rest/short-codes)\n- [Token](https://www.twilio.com/docs/api/2010-04-01/rest/token)\n- [Transcription](https://www.twilio.com/docs/api/2010-04-01/rest/transcription)\n- [SipCredentialList](https://www.twilio.com/docs/api/2010-04-01/rest/credential-list)\n    - [SipCredential](https://www.twilio.com/docs/api/rest/credential-list#subresources)\n- [SipDomain](https://www.twilio.com/docs/api/2010-04-01/rest/domain)\n- [SipIPAccessControlList](https://www.twilio.com/docs/api/2010-04-01/rest/ip-access-control-list)\n    - [SipIpAddress](https://www.twilio.com/docs/api/rest/ip-access-control-list#subresources)\n\nTwilio's Lookup Rest API:\n\n- [Lookup](https://www.twilio.com/docs/api/lookups)\n\nTwilio's TaskRouter API:\n\n- [Overview](https://www.twilio.com/docs/api/taskrouter/rest-api)\n- [Activites](https://www.twilio.com/docs/api/taskrouter/activities)\n- [Events](https://www.twilio.com/docs/api/taskrouter/events)\n- [Task Channels](https://www.twilio.com/docs/api/taskrouter/rest-api-task-channel)\n- [Tasks](https://www.twilio.com/docs/api/taskrouter/tasks)\n    - [Reservations](https://www.twilio.com/docs/api/taskrouter/reservations)\n- [TaskQueues](https://www.twilio.com/docs/api/taskrouter/taskqueues)\n    - [Statistics](https://www.twilio.com/docs/api/taskrouter/taskqueue-statistics)\n- [Workers](https://www.twilio.com/docs/api/taskrouter/workers)\n    - [Channels](https://www.twilio.com/docs/api/taskrouter/rest-api-workerchannel)\n    - [Statistics](https://www.twilio.com/docs/api/taskrouter/worker-statistics)\n- [Workflows](https://www.twilio.com/docs/api/taskrouter/workflows)\n    - [Statistics](https://www.twilio.com/docs/api/taskrouter/workflow-statistics)\n- [Workspaces](https://www.twilio.com/docs/api/taskrouter/workspaces)\n    - [Statistics](https://www.twilio.com/docs/api/taskrouter/workspace-statistics)\n\nTwilio's ProgrammableChat API:\n\n- [Overview](https://www.twilio.com/docs/api/chat/rest)\n- [Services](https://www.twilio.com/docs/api/chat/rest/services)\n  - [Channels](https://www.twilio.com/docs/api/chat/rest/channels)\n    - [Members](https://www.twilio.com/docs/api/chat/rest/members)\n  - [Users](https://www.twilio.com/docs/api/chat/rest/users)\n    - [UserChannels](https://www.twilio.com/docs/api/chat/rest/user-channels)\n  - [Roles](https://www.twilio.com/docs/api/chat/rest/user-channels)\n- [Credentials](https://www.twilio.com/docs/api/chat/rest/credentials)\n\nTwilio Capability Tokens:\n- [Worker](https://www.twilio.com/docs/api/taskrouter/worker-js)\n- [Calling](https://www.twilio.com/docs/api/client/capability-tokens) (Deprecated, use Access Token instead)\n\nTwilio Access Token Grants:\n- [Chat](https://www.twilio.com/docs/chat/identity)\n- [Voice](https://www.twilio.com/docs/iam/access-tokens)\n- [Video](https://www.twilio.com/docs/video/tutorials/user-identity-access-tokens#about-access-tokens)\n\n### Example\n\n```elixir\n# Get all the calls in the Call endpoint. Be warned, this will block\n# until all the pages of calls have been fetched.\ncalls = ExTwilio.Call.all\n\n# Create a stream of all the calls\nstream = ExTwilio.Call.stream\n\n# Lazily filter calls by duration, then map to get only their SIDs\nstream\n|\u003e Stream.filter(fn(call) -\u003e call.duration \u003e 120 end)\n|\u003e Stream.map(fn(call) -\u003e call.sid end)\n|\u003e Enum.into([]) # Only here does any work happen.\n# =\u003e [\"CAc14d7...\", \"CA649ea861...\"]\n\n# Find a call\n{:ok, call} = ExTwilio.Call.find(\"CA13a9c7f80c6f3761fabae43242b5b6c6\")\ninspect(call)\n# %ExTwilio.Call{\n#   account_sid: \"ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\",\n#   answered_by: nil, caller_name: \"\",\n#   date_created: \"Sat, 14 Mar 2015 14:27:38 +0000\",\n#   date_updated: \"Sat, 14 Mar 2015 14:28:35 +0000\",\n#   direction: \"outbound-api\",\n#   duration: \"52\",\n#   end_time: \"Sat, 14 Mar 2015 14:28:35 +0000\",\n#   forwarded_from: nil,\n#   from: \"+1xxxxxxxxxx\",\n#   parent_call_sid: nil,\n#   phone_number_sid: \"\",\n#   price: \"-0.01500\",\n#   price_unit: \"USD\",\n#   sid: \"CA13a9c7f80c6f3761fabae43242b5b6c6\",\n#   start_time: \"Sat, 14 Mar 2015 14:27:43 +0000\",\n#   status: \"completed\",\n#   to: \"+1xxxxxxxxxx\",\n#   uri: \"/2010-04-01/Accounts/ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx/Calls/CAxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.json\"\n# }\n\n# Update a call\ncall = ExTwilio.Call.update(call, status: \"canceled\")\n\n# Get a call's recordings. This pattern is repeated wherever you are\n# getting a nested resource.\nrecordings = ExTwilio.Recording.all(call: call.sid)\n\n# Destroy a call\nExTwilio.Call.destroy(call)\n```\n\nFor more in-depth documentation, see the generated docs for each module.\n\n### Making and Receiving Calls\n\nSee the [CALLING_TUTORIAL.md](CALLING_TUTORIAL.md) file for instructions on\nmaking and receiving calls from the browser with ExTwilio.\n\n\n### Sending SMS messages\n\nPlease look at `ExTwilio.Message`\n\n## Contributing\n\nSee the [CONTRIBUTING.md](CONTRIBUTING.md) file for contribution guidelines.\n\n## Copyright and License\n\nCopyright (c) 2015 Daniel Berkompas\n\nExTwilio is licensed under the MIT license. For more details, see the `LICENSE`\nfile at the root of the repository. It depends on Elixir, which is under the\nApache 2 license.\n\nTwilio™ is trademark of Twilio, Inc.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielberkompas%2Fex_twilio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielberkompas%2Fex_twilio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielberkompas%2Fex_twilio/lists"}