Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - TwilioDevEd/task-router-rails: Rails implementation of TaskRouter · GitHub
Skip to content
This repository was archived by the owner on May 13, 2025. It is now read-only.

Repository files navigation

Twilio

Task Router - Rails

Give your customers specialized product support. Learn how to use TaskRouter to create a workflow that will redirect users to an appropriate sales agent, based on the product they select.

Local Development

This project is built using Ruby on Rails Framework for the backend and NodeJS to serve the frontend assets.

  1. First clone this repository and cd into it.

    $ git clone git@github.com:TwilioDevEd/task-router-rails.git
    $ cd task-router-rails
  2. Install the backend dependencies. Be sure to have SQLite installed on your system before running this command.

    $ bundle install
  3. Install the frontend dependencies.

    $ npm install
  4. Expose your application to the wider internet using ngrok.

    This step is important because the application won't work as expected if you run it through localhost.

    $ ngrok http 3000

    Your ngrok URL should look something like this: http://9a159ccf.ngrok.io

    You can read this blog post for more details on how to use ngrok.

  5. Configure Twilio to call your webhooks

    You will also need to configure Twilio to call your application when calls or SMSs are received on your TWILIO_NUMBER. Your urls should look something like this:

    voice: http://9a159ccf.ngrok.io/call/incoming
    sms: http://9a159ccf.ngrok.io/message/incoming
    

    Learn how to configure a Twilio phone number for Programmable Voice

    Learn how to configure a Twilio phone number for Programmable SMS

  6. Copy the sample configuration file and edit it to match your configuration.

    $ cp .env.example .env

    You can find your TWILIO_ACCOUNT_SID and TWILIO_AUTH_TOKEN in your Twilio Account Settings. You will also need a TWILIO_NUMBER, which you may find here.

  7. Create database and run migrations.

    $ bundle exec rake db:setup
  8. Make sure the tests succeed.

    $ bundle exec rspec
  9. Start the server.

    $ bundle exec rails s

That's it!

How to Demo

  1. First make sure you have correctly filled all the required environment variables from the .env.example file. Bob and Alice's number should be two different numbers where you can receive calls and SMSs.

  2. When you run the app, a new workspace will be configured. Once that is done, you are ready to call your Twilio Number where you'll be asked to select a product using your key pad.

  3. Select and option and the phone assigned to the product you selected (Bob or Alice's) will start ringing. You can answer the call and have a conversation.

  4. Alternatively, if you don't answer the call within 15 seconds, the call should be redirected to the next worker. If the call isn't answered by the second worker, you should be redirected to voice mail and leave a message. The transcription of that message should be sent to the email you specified in your environment variables.

  5. Each time a worker misses a call, their activity is changed to offline. Right after they should receive a notification, via SMS, saying that they missed the call. In order to go back online they can reply with On. They can as well reply with Off in order to go back to offline status.

  6. If both workers' activity changes to Offline and you call your Twilio Number again, you should be redirected to voice mail after a few seconds as the workflow timeouts when there are no available workers. Change your workers status with the On SMS command to be able to receive calls again.

  7. Navigate to https://<ngrok_subdomain>.ngrok.io to see a list of the missed calls.

Meta

  • No warranty expressed or implied. Software is as is. Diggity.
  • MIT License
  • Lovingly crafted by Twilio Developer Education.

About

Rails implementation of TaskRouter

Topics

Resources

Code of conduct

Contributing

Stars

3 stars

Watchers

4 watching

Forks

Releases

Packages

Contributors

Languages