1 / 24

Text me, maybe

Text me, maybe. Implementing texting functionality in the Aleph OPAC. Alevtina (Allie) Verbovetskaya Web & Mobile Systems Librarian City University of New York IGeLU 2014 | Oxford, UK| September 16, 2014. Texting item location info from the OPAC. Web OPAC. Received SMS. Outline.

olina
Download Presentation

Text me, maybe

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Text me, maybe Implementing texting functionality in the Aleph OPAC Alevtina (Allie) Verbovetskaya Web & Mobile Systems Librarian City University of New York IGeLU 2014 | Oxford, UK| September 16, 2014

  2. Texting item location info from the OPAC Web OPAC Received SMS

  3. Outline • How To • Gotchas • Response & Usage • Enhancements

  4. How To Step-by-step instructions

  5. Add new CSS class (“sms”) $ vi exlibris-xxx01.css ... #sms { width: 250px; font-family: arial, helvetica, sans-serif; border: 1px solid #36647B; position: absolute; left: 50%; top: 50%; z-index: 1000; padding: 10px; margin: 10px; background: #EFEFCF; } ...

  6. Add ID (“bib-items”) to table with holding info $ vi item-global-body-head ... <table border="0" cellspacing="2" id="bib-items"> <tr class="tr1"> <th class="text3">&nbsp;</th> <th class="text3">Library</th> <th class="text3">Location</th> <th class="text3">Call number</th> <th class="text3">Description</th> <th class="text3">Item Status</th> <th class="text3">Due date</th> <th class="text3">Due hour</th> </tr> ...

  7. Add ID (“bib-detail”) to table with item info $ vi item-global-head-1 ... <table width="100%" id="bib-detail"> ...

  8. Add “Text this!” link (span ID “smslink”) $ vi item-global-dropdown-menus-a ... <span id="smslink"> <a href="#" onClick="showSMS();return false;">Text this!</a> </span> ...

  9. Add JS to hide “Text this!” link if no data $ vi item-global-body-tail ... <script> varitms = document.getElementById('bib-items'); vartr = itms.getElementsByTagName('tr'); for( vari = 1; i < tr.length; i++ ) { var td = tr[i].getElementsByTagName('td'); // our items table has 8 columns (if item exists)... // yours may be different! change accordingly! if( td.length !== 8 ) { document.getElementById('smslink').style.visibility='hidden'; } } </script> ...

  10. Create new span tag (ID “sms”) to display form $ vi item-global-dropdown-menus-a ... <span id="sms" style="visibility:hidden;display:none;"></span> ...

  11. Write sms-js & include in header varphone = frm.phone.value; phone = phone.replace( /[^\d]/ig, "" ); varprvdr = frm.provider.options[frm.provider.selectedIndex].value; if( ( phone.length == 10 ) && ( prvdr !== "" ) ) { varurl = smsurl; if( frm.title.value.length > 75 ) { url += "title=" + encodeURIComponent( frm.title.value ).substring( 0, 74 ) + " (...)"; } else { url += "title=" + encodeURIComponent( frm.title.value ); } url += "&number=" + encodeURIComponent( frm.phone.value ); url += "&provider=" + encodeURIComponent( frm.provider.options[frm.provider.selectedIndex].value ); for( i = 0; i < frm.lib.length; i++ ) { if( frm.lib[i].checked == true ) { url += "&item=" + encodeURIComponent( frm.lib[i].value ); } } if( frm.lib.length == undefined ) { url += "&item=" + encodeURIComponent( frm.lib.value ); } var head = document.getElementsByTagName( "head" )[0]; var script = document.createElement( 'script' ); script.setAttribute( 'type', 'text/javascript' ); (...or just download it from http://db.tt/JO638ug7)

  12. In cgi-bin, write sms.pl & chmod 0755 'Nextel' => '@messaging.nextel.com', 'Sprint' => '@messaging.sprintpcs.com', 'T-Mobile' => '@tmomail.net', 'Verizon' => '@vtext.com', 'Virgin' => '@vmobl.com' ); # return address need not be an actual email address # (but should be easily identifiable to your users) my $from = "refdesk\@your.lib"; my $q = new CGI; my $num = $q->param( 'number' ); # remove all non-digit characters from number: $num =~ s/[^\d]//ig; # concatenate number with SMTP domain from %providers: my $to = $num . $providers{ $q->param( 'provider' ) }; # remove all parentheses and dashes: $to =~ s/[\(\)\-\s]//ig; my $title = $q->param( 'title' ); # remove extraneous whitespaces at beginning & end of line: $title =~ s/^\s+|\s+$//g; my $hold = $q->param( 'item' ); my $body = "'$title'\n$hold\n--DO NOT RESPOND"; # replace [mail-server] with your SMTP domain my $smtp = Net::SMTP->new( "[mail-server]", Debug => 1 ); $smtp->mail( $from ); $smtp->to( $to ); $smtp->data(); $smtp->datasend( $body ); $smtp->dataend(); (...or just download it from http://db.tt/8BJcUTQF)

  13. Gotchas Unexpected bumps in the road (and how we overcame them)

  14. Lack of dedicated SMS server • Messages sent from ILS server erroneously flagged as spam • Rule added for spam filter • Text messages sent as emails • Force user to know & select cellular carrier

  15. Location of item title inconsistent on holding page • Added trailing slash to titles so JS can identify them: $ vi ./xxx01/edit_paragraph.eng !* Author-Title for Bib Inf 013 1#### D ^:^ 013 245## 9 ## ^/^ 013 250## D ## . 013 260## W ##^ . 013 300## D ##^ . • Included JavaScript in footer to remove slash(after SMS script has had a chance to run):

  16. Script to remove extra slash in title $ vi item-global-tail-1 <script> // some titles end with two slashes (//) and, because this is not a // desired behavior, we are replacing the two slashes with just one slash var bib = document.getElementById( "bib-detail" ); var x = bib.rows; for( vari = 0; i < x.length; i++ ) { var y = x[i].cells; for( var j = 0; j < y.length; j++ ) { var txt = y[j].innerHTML; y[j].innerHTML = txt.replace( /\/\//g, "/" ); } } </script>

  17. Response & Usage Feedback from the campuses & review of the server logs

  18. Response from librarians & staff • Slew of positive emails in response to announcement: • “I’m really glad to see this OPAC feature at last.” • “…it’s so great to have something to help the students! YAY” • “I just wanted to thank you for yet another awesome OPAC improvement!!!! I am really going to make use of this feature.” • “…I am promoting it when I teach my library instruction classes. What a great tool for our students!” • There were suggestions, too: • “…could the text include a link back to the item in the catalog? For example, since I tried texting info to myself about an ebook, I imagine if I was texting that info I’d want to log back in later to access that title? But this is just a suggestion—I think the texting feature on its own is great.” • “Allie, I am not sure why or if this would be useful on the mobile catalog, but just wondering if you are planning on adding it to that.”

  19. Usage statistics • Stats being gathered from Apache error log • One year after implementation (04/04/13 - 04/26/14)... • 11,008 text messages were sent from the OPAC: • AT&T, Verizon, and T-Mobile were the most frequently used cellular providers: alephap1-18(1) CUN01-ALEPH>>grep-c 'Recipient ok' error_log11008

  20. Sample log entry

  21. Enhancements Opportunities to improve functionality

  22. Ideas • Making API calls rather than screen scraping • Adding link back to OPAC (esp. for e-resources) • Using URL shortener, perhaps? • Using dedicated SMS server for improved performance • Adding feature to Primo (using custom tiles)

  23. Thank you! Any questions?

  24. Allie Verbovetskaya Web & Mobile Systems Librarian Office of Library Services City University of New York alevtina.verbovetskaya@cuny.edu @alevtina

More Related